#include <iostream>
#include <unordered_map>
#include <string>
#include "include/huffmanNode.h" // 假设HuffmanNode.h包含了HuffmanNode的声明和Huffman树的操作
#include "include/huffmanTree.h" // 假设HuffmanTree.h包含了HuffmanNode的声明和Huffman树的操作
#include "include/huffmanCodes.h" // 包含了哈夫曼编码的生成和操作的函数声明

int main() {
    std::string text = "this is an example for huffman encoding";

    // 计算每个字符的频率
    std::unordered_map<std::string, int> freqMap;
    freqMap = getfr(text);
    
    // 构建哈夫曼树
    HuffmanNode* root = buildHuffmanTree(freqMap);

    // 生成哈夫曼编码表
    std::unordered_map<std::string, std::string> huffmanCode;
    generateCodes(root, "", huffmanCode);

    // 打印哈夫曼编码表
    for (const auto& pair : huffmanCode) {
        std::cout << pair.first << ": " << pair.second << std::endl;
    }

    // 示例文本编码
    std::string encodedText = encode(text, huffmanCode);
    std::cout << "Encoded text: " << encodedText << std::endl;

    // 解码编码后的文本
    std::string decodedText = decode(root, encodedText);
    std::cout << "Decoded text: " << decodedText << std::endl;

    // 释放哈夫曼树内存（如果需要）
    // 注意：这取决于HuffmanTree.cpp中如何管理内存
    // 如果使用了智能指针，则可能不需要显式释放
    // freeHuffmanTree(root); // 假设有这样的函数来释放树

    return 0;
}